import axios from 'axios'
import { getToken } from "@/utils/Auth/auth";
import {  Message } from 'element-ui'
import store from '@/store'

// 解决后端跨域获取不到cookie问题
axios.defaults.withCredentials = true
axios.defaults.headers['Content-Type'] = 'application/json'

const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: process.env.VUE_APP_BASE_API,
    // 超时
    // timeout: 30000
    responseType: "json",
    withCredentials: true, // 是否允许带cookie这些
    headers: {
        "Content-Type": "application/json;charset=utf-8"
    }
})

// request拦截器
service.interceptors.request.use(config => {
    // 是否需要设置 token
    if (getToken()) {
        //将token放到请求头发送给服务器,将token key放在请求头中
        config.headers['Authorization'] = 'Bearer ' + getToken();
        // todo 考虑是否需要
        config.headers['userid'] = store.getters.userId;
    } else {
        // console.log(config)
    }
    return config;
}, error => {
    Message({                 
        showClose: true,
        message: error,
        type: "warning"
      });
      return Promise.reject(error);
    // console.log(error)
    // Promise.reject(error)
})


// service.interceptors.response.use(res => {
//     if (res.status !== 200) {
//         Promise.reject('network error');
//         return;
//     }

//     const { code, msg } = res.data;
//     // 二进制数据则直接返回
//     if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
//         return res.data
//     }
//     if (res.status == 401) {

//     }

// })

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        service
            .get(url, {
                params: params
            })
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err)
            })
    })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object}params [请求时携带的参数]
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        service
            .post(url, {
                params: params
            })
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err)
            })
    })
}

/**
 * put方法，对应put请求
 * @param {String} url [请求的url地址]
 * @param {Object}params [请求时携带的参数]
 */
export function put(url, params) {
    return new Promise((resolve, reject) => {
        service
            .put(url, {
                params: params
            })
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err)
            })
    })
}